#include <iostream>
#include <pthread.h>
#include <signal.h>
#include <unistd.h>

// void sigcb(int signo)
// {
//     std::cout<<"我是信号 ：" << signo <<std::endl;
// }

// int main()
// {
//     ::signal(2,sigcb);
//     while(true)
//     {
//     std::cout<<"1"<<std::endl;
//     sleep(2);
//     }

//     return 0;
// }

// //线程A打印-我是线程A；线程B打印-我是线程B；
// 最终实现交替打印，不能出现连续的相同打印。 #include <stdio.h> #include
// <pthread.h> #include <unistd.h>
// //互斥锁
// pthread_mutex_t g_lock;
// //同步
// pthread_cond_t thread_a_cond;
// pthread_cond_t thread_b_cond;
// int g_is_my_turn = 0;
// void *thread_a_start(void *arg)
// {
//   (void)arg;
//   while (1)
//   {
//     pthread_mutex_lock(&g_lock);
//     while (g_is_my_turn == 1)
//     {
//       pthread_cond_wait(&thread_a_cond, &g_lock);
//     }
//     printf("线程A打印-我是线程A\n");
//     g_is_my_turn++;
//     pthread_mutex_unlock(&g_lock);
//     pthread_cond_signal(&thread_b_cond);
//   }
// }

// void *thread_b_start(void *arg)
//  {
//   (void)arg;
//   while (1)
//   {
//     sleep(1);
//     pthread_mutex_lock(&g_lock);
//     while (g_is_my_turn == 0)
//     {
//       pthread_cond_wait(&thread_b_cond, &g_lock);
//     }
//     printf("线程B打印-我是线程B\n");
//     g_is_my_turn--;
//     pthread_mutex_unlock(&g_lock);
//     pthread_cond_signal(&thread_a_cond);
//   }
// }

// int main()
// {

//   pthread_mutex_init(&g_lock, NULL);

//   pthread_cond_init(&thread_a_cond, NULL);

//   pthread_cond_init(&thread_b_cond, NULL);

//   pthread_t thread_a, thread_b;

//   int ret = pthread_create(&thread_a, NULL, thread_a_start, NULL);

//   if (ret < 0)
//   {
//     perror("pthread_create");
//     return 0;
//   }

//   ret = pthread_create(&thread_b, NULL, thread_b_start, NULL);

//   if (ret < 0)
//   {

//     perror("pthread_create");

//     return 0;
//   }
//   pthread_join(thread_a, NULL);
//   pthread_join(thread_b, NULL);
//   pthread_mutex_destroy(&g_lock);
//   pthread_cond_destroy(&thread_a_cond);
//   pthread_cond_destroy(&thread_b_cond);
//   return 0;
// }


// //sigation函数应用
// #include <signal.h>
// #include <stdio.h>
// #include <unistd.h>
// static void sigcb(int s) 
// { 
//   printf("Catch a signal sigint: %d\n",s); 
// }
// int main() 
// {
//   int i;
//   struct sigaction act, oact;
//   act.sa_handler = sigcb;
//   ::sigemptyset(&act.sa_mask); //清空此信号集
//   act.sa_flags = 0;
//   ::sigaction(SIGINT, &act, &oact);
//   // signal(SIGINT, SIG_IGN);
//   while (1) 
//   {
//     for (i = 0; i < 5; i++) 
//     {
//       ::write(1, ".", 1);
//       sleep(1);
//     }
//     ::write(1, "\n", 1);
//   }
//   ::sigaction(SIGINT, &oact, NULL); //恢复成原始状态
//   return 0;
// }
